IdObject:
  type: object
  properties:
    id:
      type: integer
      description: id
      example: 1

File:
  type: object
  properties:
    path:
      type: string
      description: Путь до файла относительно корня диска домена
      example: "attachments/48/2f/image.png"
    root_path:
      type: string
      description: Путь до файла относительно корня физического диска ensi
      example: "protected/domain/attachments/48/2f/image.png"
    url:
      type: string
      description: Ссылка для скачивания файла
      example: "https://es-public.project.ru/domain/attachments/48/2f/image.png"

MultipartFileUploadRequest:
  type: object
  properties:
    file:
      type: string
      format: binary
      description: Загружаемый файл

PaginationTypeCursorEnum:
  type: string
  description: >
    * Pagination types:
    * `cursor` - Пагинация используя cursor
  enum:
    - cursor
  x-enum-varnames:
    - CURSOR

PaginationTypeOffsetEnum:
  type: string
  description: >
    * Pagination types:
    * `offset` - Пагинация используя offset
  enum:
    - offset
  x-enum-varnames:
    - OFFSET

PaginationTypeEnum:
  type: string
  description: >
    Pagination types:
    * `cursor` - Пагинация используя cursor
    * `offset` - Пагинация используя offset
  enum:
    - cursor
    - offset
  x-enum-varnames:
    - CURSOR
    - OFFSET

RequestBodySort:
  type: array
  items:
    type: string

RequestBodyInclude:
  type: array
  items:
    type: string

RequestBodyPagination:
  oneOf:
    - $ref: '#/RequestBodyCursorPagination'
    - $ref: '#/RequestBodyOffsetPagination'

RequestBodyCursorPagination:
  type: object
  properties:
    cursor:
      type: string
      example: "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0"
    limit:
      type: integer
      example: 20
    type:
      description: Тип пагинации
      allOf:
        - type: string
        - $ref: '#/PaginationTypeCursorEnum'

RequestBodyOffsetPagination:
  type: object
  properties:
    limit:
      type: integer
      example: 20
    offset:
      type: integer
      example: 0
    type:
      description: Тип пагинации
      allOf:
        - type: string
        - $ref: '#/PaginationTypeOffsetEnum'

ResponseBodyPagination:
  oneOf:
    - $ref: '#/ResponseBodyCursorPagination'
    - $ref: '#/ResponseBodyOffsetPagination'

ResponseBodyCursorPagination:
  type: object
  properties:
    cursor:
      type: string
      example: "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0"
      nullable: true
    limit:
      type: integer
      example: 20
    next_cursor:
      type: string
      example: "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0"
      nullable: true
    previous_cursor:
      type: string
      example: "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0"
      nullable: true
    type:
      description: Тип пагинации
      allOf:
        - type: string
        - $ref: '#/PaginationTypeCursorEnum'

ResponseBodyOffsetPagination:
  type: object
  properties:
    limit:
      type: integer
      example: 20
    offset:
      type: integer
      example: 0
    total:
      type: integer
      example: 253
    type:
      description: Тип пагинации
      allOf:
        - type: string
        - $ref: '#/PaginationTypeOffsetEnum'